package com.hl.reflect;

import java.lang.reflect.Field;

public class ReflectApp01 {

    /**
     * 反射的作用
     *      1. 获取一个类里面的所有信息（包括成员变量，方法，构造器），再执行其他业务逻辑
     *      2. 动态创建对象并调用方法，从配置文件读取类和方法的信息
     * 针对 1，需求如下
     *      根据传入的 obj，保存 obj 的所有属性值，以 key-value 的形式，保存到文件
     *
     */
    public static void main(String[] args) throws IllegalAccessException {
        Student student = new Student("zhang", 88, "男");
        saveObj(student);
        Teacher teacher = new Teacher("li", 11, 123.456);
        saveObj(teacher);
    }

    public static void saveObj(Object obj) throws IllegalAccessException {
        // get class
        Class<?> clazz = obj.getClass();
        // get all fields
        Field[] fields = clazz.getDeclaredFields();
        // get field and value, save to file
        for (Field field : fields) {
            String name = field.getName();
            field.setAccessible(true);
            Object value = field.get(obj);
            System.out.println(name + " = " + value);
            // save to file
        }
        System.out.println();
    }


}
